let oldArrayPrototype = Array.prototype;
export let arrayMethods = Object.create(oldArrayPrototype);
// arrayMethods.__proto__ = Array.prototype  继承

let methods = ["push", "pop", "unshift", "shift", "reverse", "sort", "splice"];

methods.forEach((method) => {
  // 用户调用的如果是以上七个方法， 会用自己重写的， 否则用原来的数组方法
  arrayMethods[method] = function (...args) {
    // args是参数列表， arr.push(1,2,3)
    // console.log("数组发生了变化");
    oldArrayPrototype[method].call(this, ...args);
    let inserted;
    let ob = this.__ob__; // 根据当前数组获取到observer实例
    // 如果新增的是对象呢
    switch (method) {
      case "push":
      case "unshift":
        args; // 就是新新增的内容
        break;
      case "splice":
        inserted = arg.slice(2);
      default:
        break;
    }
    // 如果有新增的内容， 需要进行继续劫持， 我需要观测的数组中的每一项， 而不是数组
    ob.dep.notify()
    // 更新操作， todo...更新视图
    if (inserted) {
      ob.observerArray(inserted);
    }
  };
});
